package QianFeng07.IODemo2;

import java.nio.charset.StandardCharsets;

/**
 * 常见编码有: ISO8859-1、 GBK/GB2312、 unicode、 UTF。
 *
 * iso8859-1:
 * 编码属于单字节编码，最多只能表示0---255的字符范围，主要在英文上应用。
 * GBK/GB2312:
 * 中文的国际编码，专门用来表示汉字，是双字节编码
 * unicode:
 * java中就是使用此编码方式，也是最标准的一种编码，是使用16进制表示的编码。但此编码不兼容iso8859-1编码。
 * UTF:
 * 由于unicode不支持iso8859-1编码，而且容易占用更多的空间，而且对于英文母也需要使用两个字节编码，这样使
 * 用unicode不便于传输和储存，因此产生了utf编码，utf编码兼容 了iso8859-1编码，也可以用来表示所有语言字符,
 * 不过utf是不定长编码，每个字符的长度从1-6个字节不等，一般在中文网页中使用此编码，因为这样可以节省空间。
 *
 * 造成乱码的根本原因:
 * 1、程序使用的编码与本机的编码不统一
 * 2、在网络中，客户端与服务端编码不统一(Web开发中乱码)
 **/
public class CodeDemo {
    public static void main(String[] args) {
        //通常产生乱码的情况是，两个不兼容的编码相互转换
        String info = "小河流水哗啦啦";
        String newInfo = new String(info.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
        System.out.println(newInfo);

        String newInfo2 = new String(newInfo.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        System.out.println(newInfo2);
    }
}
